package com.dj.mingkong.admin.biz.repository.database.music.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dj.mingkong.admin.biz.scheduler.vo.gen.*;
import com.dj.mingkong.common.infrastructure.eo.database.music.MusicEo;
import com.dj.mingkong.common.infrastructure.eo.elasticsearch.music.MusicEsEo;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 音乐mapper
 *
 * @author zenglonghui
 * @date: 2022/5/17 17:20
 */
public interface MusicMapper extends BaseMapper<MusicEo> {
    /**
     * 获取首页音乐数据
     *
     * @param musicPage  Page
     * @param classify   String
     * @param navMenuKey String
     * @return IndexMusicVo
     */
    List<IndexMusicVo> selectIndexMusicList(
            Page<IndexMusicVo> musicPage, @Param("classify") String classify, @Param("navMenuKey") String navMenuKey);

    /**
     * 获取播放页猜你喜欢的音乐数据
     *
     * @param musicPage Page
     * @param queryVo   {}
     * @return PlayLikeMusicVo
     */
    Page<PlayLikeMusicVo> selectLikeMusicList(Page<PlayLikeMusicVo> musicPage, @Param("queryVo") PlayLikeMusicQueryVo queryVo);

    /**
     * 获取列表音乐数据
     *
     * @param musicPage  Page
     * @param navMenuKey String
     * @return ListMusicVo
     */
    Page<ListMusicVo> selectGenListHtmlMusicPage(Page<ListMusicVo> musicPage, @Param("navMenuKey") String navMenuKey);

    /**
     * 获取专辑对应的音乐数据
     *
     * @param musicPage Page
     * @param albumId   Long
     * @return Page<ListMusicVo>
     */
    Page<ListMusicVo> selectMusicListByAlbumId(Page<ListMusicVo> musicPage, @Param("albumId") Long albumId);

    /**
     * 获取歌单对应的音乐数据
     *
     * @param musicPage Page
     * @param boxId   Long
     * @return Page<ListMusicVo>
     */
    Page<ListMusicVo> selectMusicListByBoxId(Page<ListMusicVo> musicPage, @Param("boxId") Long boxId);

    /**
     * 获取播放页音乐所有数据
     *
     * @return List<PlayMusicVo>
     */
    List<PlayMusicVo> selectPlayMusicList();

    /**
     * 获取音乐人音乐数据
     *
     * @param musicPage  page
     * @param musicianId long
     * @return PageVo<ListMusicVo>
     */
    Page<ListMusicVo> selectMusicianMusicPage(Page<ListMusicVo> musicPage, @Param("musicianId") Long musicianId);

    /**
     * 分页查询
     *
     * @param voPage     voPage
     * @param updateTime updateTime
     * @return MusicEsEo
     */
    Page<MusicEsEo> listPage(Page<MusicEsEo> voPage, @Param("updateTime") LocalDateTime updateTime);
}
